(() => {
  /**
   * 对于类型声明(类型别名) 只能声明一次
   *
   * 对于接口 可以重复声明  多次声明那么创建的实例应把接口中的定义的都实现
   *           接口可以限制类的结构
   *           接口只定义类的结构不定义类的实际值
   *           接口的所有方法都是抽象方法
   *
   *
   *
   */
  //描述一个对象的类型   类型别名
  type myType = {
    name: string;
    age: number;
  };
  let obj: myType = {
    name: "sss",
    age: 1,
  };

  /**
   * 接口用来定义一个对象的结构
   * 用来定义一个类中应该包含哪些属性和方法
   */
  interface myInterface {
    name: string;
    age: number;
  }
  interface myInterface {
    gender: string;
    sayHello(): void;
  }

  let obj1: myInterface = {//当作类型使用
    name: "aaa",
    age: 2,
    gender: "male",
    sayHello() {
      console.log("hello");
    },
  };

  //实现接口
  class Myclass implements myInterface { 
    name = '孙悟空';
    age = 18;
    gender = 'male';
    sayHello() { 
      console.log("嘿嘿")
    }
  }
})();
